#include <my_head.h>

#define MY_PAGE_SIZE 4*1024

int main(int argc, const char *argv[]){
    // 获取键值
    key_t my_key = ftok("/home/linux", 'A');
    if(-1 == my_key)
        ERR_LOG("ftok error");
    // 创建或者获取共享内存
    int shmid = shmget(my_key, 2*MY_PAGE_SIZE, IPC_CREAT|0666);
    if(-1 == shmid)
        ERR_LOG("shmget error");
    // 映射共享内存当当前进程中
    char *p = shmat(shmid, NULL, 0);
    if((void *)-1 == p)
        ERR_LOG("shmat error");
// -----------------------------------------
    // 获取键值
    key_t my_key2 = ftok("/home/linux", 'X');
    if(-1 == my_key)
        ERR_LOG("ftok error");
    // 创建或者获取共享内存
    int shmid2 = shmget(my_key2, MY_PAGE_SIZE, IPC_CREAT|0666);
    if(-1 == shmid2)
        ERR_LOG("shmget error");
    // 映射共享内存当当前进程中
    sem_t *p2 = shmat(shmid2, NULL, 0);
    if((void *)-1 == p)
        ERR_LOG("shmat error");

//------------------------------------------

    // 使用共享内存
    // 将共享内存的内容打印到终端
    while(1){
        sem_wait(p2);
        if(!strcmp(p, "quit")){
            break;
        }
        printf("共享内存中的内容是:[%s]\n", p);
    }
    // 取消映射
    if(-1 == shmdt(p))
        ERR_LOG("shmdt error");
    // 标记销毁 --只有当最后一个进程将该共享内存取消映射时 才会被销毁
    if(-1 == shmctl(shmid, IPC_RMID, NULL))
        ERR_LOG("shmctl error");

    return 0;
}